package org.tp;


import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**lister les fonctions par leurs noms:type_retour:types_arguments**/
public class ListeFonction{

	HashMap<String, /*List<Fonction>*/Fonction> listeFonction;   // liste de ListeFonction pour gerer la surchage.
	public boolean main=false;

	public ListeFonction(){
		listeFonction = new HashMap<String, /*List<Fonction>*/Fonction>(); 
	}
	public void ExisteMain(){
		if(main!=true){
			
			Toolkit.getDefaultToolkit().beep(); 
			System.out.println("NOT MAIN");
			System.exit(1);
			
		}
		return;
	}
	/** ajour d'une fonction, nom, type et arguuments, args doit etre de type AbSynt**/
	public void add(String id/*,String name*/, String/*Type*/ type_r, Object/*List<String>*/ args){ /*DIF entre ID et NAME?*/ 
		//System.out.println("ADD FONCTION");
		if(id.equals("main")){ main=true;}
		Fonction f = new Fonction(/*name*/id,type_r,args);
		if (args!=null){
		//System.out.println(id+":"+type_r+":"+((AbSynt)args).getArgs());/*STOCKAGE SUIVANT ID+TYPE_R+ARGS*/	

		listeFonction.put(id+":"+type_r+":"+((AbSynt)args).getArgs(),f);/*STOCKAGE SUIVANT ID+TYPE_R+ARGS*/	
		}
		else{
			//System.out.println(id+":"+type_r);/*STOCKAGE SUIVANT ID+TYPE_R+ARGS*/	

			listeFonction.put(id+":"+type_r,f);/*STOCKAGE SUIVANT ID+TYPE_R+ARGS*/	
		}
	}
	/** recuperation d'une fonction, nom, type et arguuments, args doit etre de type AbSynt**/

	public Fonction getFonction(String nam,String type_r,Object args){/*type_retour def par y=fonction(args) -> type(y)*/
	//	System.out.println("getFonction"+nam+":"+type_r+"\n");
		if(args!=null){
		return listeFonction.get(nam+":"+type_r+":"+((AbSynt)args).getTypeArgs());
		}
		return listeFonction.get(nam+":"+type_r);

	}
	
	/*public Fonction getListeFonction(String nom , String type_retour, List<String>args){ 
		List<Fonction> l=ListeFonction.get(nom);
		for(Fonction f: l){
			if(f.get_type_retour().equals(type_retour) && f.get_args().equals(args))
				return f;
		}
		return null;
	}*/

	
}
